package kgc.crm.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import kgc.crm.model.User;
import kgc.crm.util.EmptyChecker;
import kgc.crm.util.ResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import kgc.crm.model.AdminDept;
import kgc.crm.mapper.AdminDeptMapper;
import kgc.crm.service.AdminDeptService;
@Service
@Slf4j
public class AdminDeptServiceImpl extends ServiceImpl<AdminDeptMapper, AdminDept> implements AdminDeptService{
    //级联查询
    @Override
    public ResponseEntity listAll() {
        //basaMapper
        return ResultUtil.success(baseMapper.listAll());
    }
    /*递归*/
    private void test2(){
        QueryWrapper<AdminDept> qw = new QueryWrapper();
        qw.eq(AdminDept.COL_PID,0);
        List<AdminDept> depts = list(qw);
        test1(depts);
    }
    private void test1(List<AdminDept> list){
        //查询所有的父类
        for (AdminDept item : list) {
            //查子类
            QueryWrapper<AdminDept> qw = new QueryWrapper();
            qw.eq(AdminDept.COL_PID,item.getDeptId());
            List<AdminDept> depts = list(qw);
            if (depts.size() > 0){
                test1(depts);
            }
            item.setChildren(depts);
        }
    }
    @Override
    public ResponseEntity addDept(AdminDept dept) {
        if (EmptyChecker.isEmpty(dept)) {
            log.error("【部门管理】添加部门失败，实体对象不能为空",dept);
            return ResultUtil.error("添加部门失败");
        }
//        if (EmptyChecker.mybatisIsEmpty(dept)) {
//            log.error("【部门管理】添加部门失败，dept实体当中对象属性不能为空",dept);
//            return ResultUtil.error("添加部门失败");
//        }
        dept.setRemark("新增了"+dept.getName());
       // dept.setDeptHead(3);
        boolean save;
        try {
            save = save(dept);
        } catch (Exception e) {
            log.error("【部门管理】添加部门失败，sql语句执行错误",e);
            return ResultUtil.error("添加部门失败");
        }
        if (!save) {
            log.error("【部门管理】添加部门失败");
            return ResultUtil.error("添加部门失败");
        }
        return ResultUtil.success("添加成功");
    }
//编辑部门
    //如果是父类部门的话就不能编辑他的父类部门。
    //只能编辑子部门的父类部门
    @Override
    public ResponseEntity updDept(AdminDept dept) {
        if (EmptyChecker.isEmpty(dept)) {
            log.error("【部门管理】修改部门失败，实体对象不能为空",dept);
            return ResultUtil.error("修改部门失败");
        }
        if (EmptyChecker.isEmpty(dept.getDeptId())) {
            log.error("【部门管理】修改部门失败，DeptId不能为空",dept.getDeptId());
            return ResultUtil.error("修改部门失败");
        }
        //判断要修改的部门id是否为顶级父类部门，如果是，就无法给他设置Pid
        if (dept.getDeptId() == 1) {
            //把Pid设置为0
            dept.setPid(0);
            boolean b;
            try {
                b = updateById(dept);
            } catch (Exception e) {
                log.error("【部门管理】修改部门失败，sql语句执行出错",e);
                return ResultUtil.error("修改部门失败");
            }
            if (!b) {
                log.error("【部门管理】修改部门失败");
                return ResultUtil.error("修改部门失败");
            }
            return ResultUtil.success("修改成功");
        }
        if (dept.getDeptId() != 1) {
            boolean b;
            try {
                b = updateById(dept);
            } catch (Exception e) {
                log.error("【部门管理】修改子部门失败，sql语句执行出错",e);
                return ResultUtil.error("修改子部门失败");
            }
            if (!b) {
                log.error("【部门管理】修改子部门失败");
                return ResultUtil.error("修改子部门失败");
            }
            return ResultUtil.success("修改子部门成功");
        }
        return ResultUtil.success("修改成功");
    }


    //删除部门

    @Override
    public ResponseEntity delDept(AdminDept dept) {
        if (EmptyChecker.isEmpty(dept)) {
            log.error("【部门管理】删除子部门失败，对象不能为空",dept);
            return ResultUtil.error("删除子部门失败");
        }
        if (EmptyChecker.isEmpty(dept.getDeptId())) {
            log.error("【部门管理】删除子部门失败，参数id不能为空",dept.getDeptId());
            return ResultUtil.error("删除子部门失败");
        }
        boolean b ;
        try {
            b = removeById(dept.getDeptId());
        } catch (Exception e) {
            log.error("【部门管理】删除子部门失败，sql语句执行出错",e);
            return ResultUtil.error("删除子部门失败");
        }
        if (!b) {
            log.error("【部门管理】删除子部门失败");
            return ResultUtil.error("删除子部门失败");
        }
        return ResultUtil.success("删除子部门成功");
    }
}
